function Foo(){
    Foo.a=function(){ //Foo对象的 a , 执行此语句时覆盖 Foo.a 
        console.log(1,this)
    }
    this.a=function(){//实例中的 a
        console.log(2,this)
    }
}
Foo.prototype.a=function(){//原型中的 a
    console.log(3)
}
Foo.a=function(){//Foo对象的 a
    console.log(4,this)
}
Foo.b=function(){//Foo对象的 b
    console.log(5,this)
}
// 执行上下文 {
//     value:function Foo(){},
//     attr:{
//         a:function a(){4},
//         b:function b(){5},
//     }
// }
Foo.a();//4 此时Foo是个对象
let obj = new Foo();//执行构造函数时 Foo.a被覆盖
// 执行上下文 {
//     value:function Foo(){},
//     attr:{
//         a:function a(){1}
//         b:function b(){5},
//     }
// }
Foo.a();//1
Foo.b();
obj.a();//2
Foo.a()//1